// miniprogram/pages/myConcept/myConcept.js
const app = getApp()

Page({

  /**
   * 页面的初始数据
   */
  data: {
    conceptList: [] // 概念列表
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
   
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    // 获取openid
    this.onGetOpenid()
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 获取概念列表
    this.getConceptList()
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  onGetOpenid: function() {
    // 调用云函数
    wx.cloud.callFunction({
      name: 'login',
      data: {},
      success: res => {
        console.log('[云函数] [login] user openid: ', res.result.openid)
        app.globalData.openid = res.result.openid
        console.log('调用login云函数返回的res',res)
      },
      fail: err => {
        console.error('[云函数] [login] 调用失败', err)
      }
    })
  },

  /**
   * 获取概念列表
   */
  getConceptList: function () {
    const db = wx.cloud.database()
    // 查询当前用户所有的 counters
    db.collection('concept_info').where({
      is_delete: false
    }).orderBy('click_count', 'desc').get({
      success: res => {
        this.setData({
          conceptList: res.data
        })
        console.log('[数据库] [查询记录] 成功: ', res)
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '查询记录失败'
        })
        console.error('[数据库] [查询记录] 失败：', err)
      }
    })
  },
  // 跳转到概念详情页面
  toConceptDetail: function(event) {
    wx.navigateTo({
      url: '../conceptDetail/conceptDetail?pageUrl=myConcept/myConcept&id=' + event.currentTarget.dataset.id
    })
  },
  // 打卡概念
  like: function(event) {
    const db = wx.cloud.database()
    const _ = db.command
    let today = new Date()
    // 判断今天是否已经打卡
    db.collection('concept_like_detail').where({
      _openid: app.globalData.openid,
      concept_id: event.currentTarget.dataset.id,
      // 24小时内只能打卡一次
      create_time: _.gt(new Date(today.getFullYear(),today.getMonth(),today.getDate()))
    })
    .get()
    .then(res => {
      if(res.data.length > 0) {
        wx.showToast({
          icon: 'none',
          title: '今天已经打过卡了！'
        }) 
      } else {
        // 更新打卡次数
        this.updateClickCount(db, event.currentTarget.dataset.id, event.currentTarget.dataset.index)
      }
    })
    .catch(
        err => {
          wx.showToast({
            icon: 'none',
            title: '查询记录失败'
          })
          console.error('[数据库] [查询记录] 失败：', err)
        }
    )
  },
  // 更新打卡次数
  updateClickCount: function(db, conceptId, conceptIndex) {
    const _ = db.command
    db.collection('concept_info').doc(conceptId).update({
      data: {
        click_count: _.inc(1)
      },
      success: res => {
        console.log(res)
        wx.showToast({
          title: '打卡成功',
        })
        // 新增打卡明细
        this.addLikeConceptDetail(db, conceptId)
        // 修改页面上的打卡次数
        let clickCountKey = 'conceptList[' + conceptIndex + '].click_count'
        let clickCount = this.data.conceptList[conceptIndex].click_count
        this.setData({
          [clickCountKey] : clickCount + 1
        })
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '打卡失败'
        })
        console.error('[数据库] [新增记录] 失败：', err)
      }
    })
  },
  // 新增打卡明细
  addLikeConceptDetail: function(db, conceptId) {
    db.collection('concept_like_detail').add({
      data: {
        concept_id: conceptId,
        create_time: db.serverDate()
      },
      success: res => {
        console.log(res)
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '新增打卡明细失败'
        })
        console.error('[数据库] [新增记录] 失败：', err)
      }
    })
  }
})